

/**
 * 百度地图-水表标注点初始化
 * @param {BMapGL.Map} map - 百度地图实例
 * @param {Array} elements - 水表数据数组
 * @param {string} elementPointUrl - 标注点图标URL
 * @param {Function} [onMarkerClick] - 标注点点击事件处理函数
 */
export function markersInit(map, elements, elementPointUrl,onMarkerClick) {
    const markers = [];
    // 参数验证
    if (!map || !(map instanceof BMapGL.Map)) {
        console.error('无效的地图实例');return;
    }
    if (!elements || !Array.isArray(elements) || elements.length === 0) {
        console.warn('没有有效的水表数据');return;
    }

    // 遍历所有水表元素
    elements.forEach(element => {
        try {
            // 解析经纬度信息
            let geoData;
            if (typeof element.elemGeo === 'string') {
                try {
                    geoData = JSON.parse(element.elemGeo);
                } catch (parseError) {
                    console.error(`水表[${element.id}]经纬度格式错误:`, parseError);
                    return;
                }
            } else {
                geoData = element.elemGeo;
            }

            // 验证经纬度数据
            if (!geoData || typeof geoData.lng !== 'number' || typeof geoData.lat !== 'number') {
                console.warn(`水表[${element.elemName || element.id}]经纬度信息不完整或无效`);
                return;
            }

            const point = new BMapGL.Point(geoData.lng, geoData.lat);

            // 创建自定义图标
            const myIcon = new BMapGL.Icon(elementPointUrl, new BMapGL.Size(36, 36), {
                anchor: new BMapGL.Size(18, 18), // 定位点在图标中心
                imageOffset: new BMapGL.Size(0, 0) // 图标偏移
            });

            // 创建标注并添加点击事件
            const marker = new BMapGL.Marker(point, { icon: myIcon });
            marker.addEventListener("click", function() {
                if (typeof onMarkerClick === 'function') {onMarkerClick(element);}
            });

            markers.push(marker);

        } catch (error) {
            console.error(`处理水表[${element.id}]数据时出错:`, error);
        }
    });
    return markers;
}

/**
 * 百度地图-区域多边形初始化
 * @param {BMapGL.Map} map - 百度地图实例
 * @param {Array} areaList - 区域数据数组
 * @param {Function} [onPolygonClick] - 多边形点击事件处理函数
 */
export function polygonsInit(map, areaList, onPolygonClick) {
    const polygons = [];
    // 遍历每个区域，绘制多边形
    areaList.forEach(area => {
        try {
            // 解析经纬度信息
            let geoData;
            geoData = JSON.parse(area.areaGeo);
            // 验证经纬度数据
            if (!geoData || !Array.isArray(geoData) || geoData.length === 0) {
                console.warn(`区域[${area.areaName || area.id}]经纬度信息不完整或无效`);
                return;
            }
            // 将经纬度对象转换为百度地图的 Point 数组
            const points = geoData.map(point => {
                return new BMapGL.Point(point.lng, point.lat);
            });
            // 创建多边形（配置样式）
            const polygon = new BMapGL.Polygon(points, {
                strokeColor: 'blue',      // 边线颜色
                strokeWeight: 2,         // 边线宽度
                strokeOpacity: 0.5,      // 边线透明度
                fillOpacity: 0.7         // 填充透明度
            });
            // 添加点击事件
            polygon.addEventListener("click", function () {
                if (typeof onPolygonClick === 'function') {
                    onPolygonClick(area);
                }
            });
            polygons.push(polygon);
        } catch (error) {
            console.error(`处理区域[${area.id}]数据时出错:`, error);
        }
    });
    return polygons;
}
